package com.bitoon.basketdudes.web;

import com.bitoon.basketdudes.web.datos.InfoCabeceraXHR;

import com.bitoon.basketdudes.web.jpa.*;
import com.bitoon.basketdudes.web.jpa.Ranking;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.util.ValueStack;

import java.util.*;
import java.util.regex.*;
import javax.persistence.*;
import org.apache.log4j.Logger;

//public class Networks extends BaseAction {

// Extiendo de Index para que pille el Manager de la Semana y el Quinteto
public class Networks extends Index {

    private static int MAX_NETWORKS_CREAR = 5;

    private String letras = null;
    private String cadena = null;
    private String nombre = null;
    private List<Network> datos;
    private Network network;
    private int pagina = 1;
    private int cuantos;
    private InfoCabeceraXHR cabecera = new InfoCabeceraXHR();
    private List<Ranking> rankingNetwork;

    // Parámetros para apuntar a todos
    private int eid;
    private String tc;
    private String cname;

    private Logger log = Logger.getLogger(Networks.class);

    private static String patternNetwork = "[0-9a-zA-ZñÑ _.]*";

    public String execute() {
        String retorno = SUCCESS;

        try {
            if (getUsuarioLogado()!=null) {
                //setListaEquiposMostrar(getUsuarioLogado().getEquipos());
            }
            setDatos(getListaNetworks());
        } catch (Exception e) {
            log.error("execute de Networks", e);
            retorno = ERROR;
        }

        return retorno;
    }

    public String xhr() {

        //esto devuelve las netoworks para paginar los resultados con ajax
        setDatos(getListaNetworks());

        return SUCCESS;
    }

    public List<EquipoNetwork> getListaRankingsNetworkPorIdEquipo(int idEquipo) {
        List<EquipoNetwork> retorno = null;
        EntityManager em = null;
        try {
            em = emfBasket.createEntityManager(); // checked

            //saco una lista de equipos / networks por el id del equipo
            Query q = em.createNamedQuery("EquipoNetwork.findByEquipoId");
            q.setParameter("idEquipo", idEquipo);
            retorno = (List<EquipoNetwork>)q.getResultList();

            //Para cada network calculamos su posicion media y su ranking ordenado
            for(EquipoNetwork r : retorno){
                r.getNetwork().getPosicionMedia();
                //obtenemos su ranking ordenado y lo asignamos a la respectiva network
                r.getNetwork().setRankingList( (List)getRankingNetworkById(r.getNetwork().getId()) );
            }
        } catch (Exception e) {
            log.error("[getListaRankingsNetworkPorIdEquipo]: Error: ", e);
        } finally {
            try { em.close(); } catch (Exception e) { }
        }

        return retorno;
    }

    /*
     * Devuelve 1 si se puede apuntar, 0 en caso contrario
     */
    private int apuntarseNetwork(int idNetwork, int idEquipo) {
        int retorno = 0;

        EntityManager em = null;
        setCabecera(new InfoCabeceraXHR());

        try {
            em = emfBasket.createEntityManager(); // checked

            EquipoNetwork en = new EquipoNetwork(idNetwork, idEquipo);
            RankingNetwork rn = new RankingNetwork(idNetwork, idEquipo);
            Network n = em.find(Network.class, idNetwork);

            log.debug("total: " + n.getTotal());

            n.setTotal(n.getTotal()+1);

            cabecera.setElementos(n.getTotal());
            
            em.getTransaction().begin();
            em.persist(en);
            em.persist(rn);

            em.getTransaction().commit();

            retorno = 1;
        } catch (Exception e) {
            log.error("[apuntarseNetwork]", e);
            retorno = 0;
        } finally {
            try { if (em.getTransaction().isActive()) { em.getTransaction().rollback(); }; } catch (Exception e) { }
            try { em.close(); } catch (Exception e) { };
        }

        cabecera.setCorrecto(retorno);
        return retorno;
    }

    public String altaNetwork() {

        cabecera.setCorrecto(0);
        int num=0;

        //chekeamos que no tenga ya creadas MAX_NETWORKS_CREAR networks
        num = comprobarNetworksCreadas();

        log.debug("Número de networks: " + num);

        if(num < MAX_NETWORKS_CREAR){

            EntityManager em = null;

            try {
                em = emfBasket.createEntityManager(); // checked

                Network n = new Network();

                // Comprobar si cumple el modelo
                Pattern pt = Pattern.compile(patternNetwork);
                if (pt.matches(patternNetwork,nombre)) {
                    nombre = escapeHtml(nombre);
                    n.setNombre(nombre);
                    n.setNombreUrl(getNombreUrl(nombre));
                    //n.setCreador(getIdUsuarioLogado());
                    n.setUsuario(getUsuarioLogado());

                    em.getTransaction().begin();
                    em.persist(n);

                    Map<String,Object> params = ActionContext.getContext().getParameters();
                    Set<String> ks = params.keySet();
                    Iterator iter = ks.iterator();
                    String prefijo = "inscribir-";
                    int altasNetwork = 0;
                    while (iter.hasNext()) {
                        String p =(String)iter.next();
                        if (p.startsWith(prefijo)) {
                            Integer idEquipo = Integer.parseInt(p.substring(prefijo.length()));
                            if (idEquipo != null) {
                                EquipoNetwork en = new EquipoNetwork(n.getId(), idEquipo);
                                em.persist(en);

                                RankingNetwork rn = new RankingNetwork(n.getId(), idEquipo);
                                em.persist(rn);

                                altasNetwork++;
                            }
                        }
                    }

                    n.setTotal(n.getTotal()+altasNetwork);
                    em.persist(n);
                    em.getTransaction().commit();

                    cabecera.setCorrecto(1);
                } else {
                    log.debug("La network " + nombre + " no cumple el patron de la expresion regular");
                    //setMensajeAlerta(getText("alertas.mi_cuenta.mis_networks.error_maximo_crear"));
                }
            } catch (Exception e) {
                log.error("[buscaNetworks]: Error: ", e);
            } finally {
                try { if (em.getTransaction().isActive()) { em.getTransaction().rollback(); }; } catch (Exception e) { }
                try { em.close(); } catch (Exception e) { };
            }
        } else { //fin de la comprobacion de comprobarNetworksCreadas()
            //mensaje de errror para el usuario
            setMensajeAlerta(getText("alertas.mi_cuenta.mis_networks.error_maximo_crear"));
        }
        
        return SUCCESS;
    }

    private int comprobarNetworksCreadas(){
        EntityManager em = null;
        List<Network> retorno = null;
        int numero = 0; //numero retornado con el nº de networks de un usuario
        try {
            em = emfBasket.createEntityManager(); // checked
            Query q = em.createNamedQuery("Network.findByUsuarioId");
            q.setParameter("idUsuario", getUsuarioLogado().getId());
            retorno = (List<Network>)q.getResultList();
            numero = retorno.size();
        } catch (Exception e) {
            log.error("[comprobbarNetworksCreadas(String)]: Error: ", e);
        } finally {
            try { em.close(); } catch (Exception e) { }
        }

        return numero;
    }

    public String apuntarseTodo() {

        String retorno = SUCCESS;
        EntityManager em = null;

        try {
            em = emfBasket.createEntityManager(); // checked

            if (tc.equals("n")) { // Networks
                Query q = em.createNamedQuery("Network.findByNombre");
                q.setParameter("nombre", cname.toLowerCase());
                Network n = (Network)q.getSingleResult();

                // Tenemos la network, hay que apuntar al equipo(s)

                int equiposApuntados = 0;
                if (eid==0) {
                    // Apuntar a todos los equipos

                    ValueStack valueStack = ActionContext.getContext().getValueStack();
                    if (valueStack.findValue("stackUserLogado") != null) {
                        Usuario u = (Usuario)valueStack.findValue("stackUserLogado");
                        List<Equipo> equipos = u.getEquipos();

                        Iterator iter = equipos.iterator();
                        while (iter.hasNext()) {
                            Equipo e = (Equipo)iter.next();
                            equiposApuntados += apuntarseNetwork(n.getId(), e.getId());
                        }
                    }

                } else {
                    equiposApuntados = apuntarseNetwork(n.getId(), eid);
                }

            }
        } catch (NoResultException nre) {
        } catch (Exception e) {
            log.error("[apuntarseTodo]: Error: ", e);
        } finally {
            try { em.close(); } catch (Exception e) { };
        }

        return retorno;
    }

    public String desapuntarseTodo() {
        String retorno = SUCCESS;
        retorno = desapuntarseNetworks();

        return retorno;
    }

    public String desapuntarseNetworks() {

        EntityManager em = null;
        log.debug("desapuntarseNetworks");

        try {
            em = emfBasket.createEntityManager(); // checked

            Map<String,Object> params = ActionContext.getContext().getParameters();
            Set<String> ks = params.keySet();
            Iterator iter = ks.iterator();
            String prefijo = "desapuntar-";
            
            while (iter.hasNext()) {
                String p =(String)iter.next();
                if (p.startsWith(prefijo)) {
                    String[] vparams = p.substring(prefijo.length()).split("-");
                    Integer idNetwork = Integer.parseInt(vparams[0]);
                    Integer idEquipo = Integer.parseInt(vparams[1]);
                    Network n = em.find(Network.class, idNetwork);
                    if (idEquipo != null && idNetwork != null) {

                        em.getTransaction().begin();

                        //lo borramos de la tabla ranking_network
                        Query q = em.createNativeQuery("delete from rankings.ranking_network where network_id = :idNetwork and equipo_id = :idEquipo");
                        q.setParameter("idNetwork", idNetwork);
                        q.setParameter("idEquipo", idEquipo);
                        q.executeUpdate();
                        
                        //lo borramos de la tabla equipo_network
                        q = em.createNativeQuery("delete from rankings.equipo_network where network_id = :idNetwork and equipo_id = :idEquipo");
                        q.setParameter("idNetwork", idNetwork);
                        q.setParameter("idEquipo", idEquipo);
                        q.executeUpdate();

                        //reducimos el total de managers menos l en la tabla network
                        n.setTotal(n.getTotal()-1);

                        em.getTransaction().commit();
                    }
                }
            }
            cabecera.setCorrecto(1);
        } catch (Exception e) {
            log.error("[desapuntarseNetworks]: Error: ", e);
        } finally {
            try { if (em.getTransaction().isActive()) { em.getTransaction().rollback(); }; } catch (Exception e) { }
            try { em.close(); } catch (Exception e) { };
        }

        return SUCCESS;
    }

    public String apuntarseNetworks() {

        EntityManager em = null;
        log.debug("apuntarseNetworks");

        try {
            em = emfBasket.createEntityManager(); // checked

            Map<String,Object> params = ActionContext.getContext().getParameters();
            Set<String> ks = params.keySet();
            Iterator iter = ks.iterator();
            String prefijo = "inscribir-";

            while (iter.hasNext()) {
                String p =(String)iter.next();
                if (p.startsWith(prefijo)) {
                    String[] vparams = p.substring(prefijo.length()).split("-");
                    Integer idNetwork = Integer.parseInt(vparams[0]);
                    Integer idEquipo = Integer.parseInt(vparams[1]);

                    em.getTransaction().begin();

                    Network n = em.find(Network.class, idNetwork);
                    if (idEquipo != null && idNetwork != null) {
                        log.debug("apuntar a " + idEquipo + " en la network id " + idNetwork);

                        EquipoNetwork en = new EquipoNetwork(idNetwork,idEquipo);
                        RankingNetwork rn = new RankingNetwork(idNetwork, idEquipo);

                        em.persist(en);
                        em.persist(rn);

                        n.setTotal(n.getTotal()+1);

                        cabecera.setElementos(n.getTotal());
                    }
                    
                    em.getTransaction().commit();

                }
            }

            cabecera.setCorrecto(1);
        } catch (Exception e) {
            log.error("[apuntarseNetworks]: Error: ", e);
        } finally {
            try { if (em.getTransaction().isActive()) { em.getTransaction().rollback(); }; } catch (Exception e) { }
            try { em.close(); } catch (Exception e) { };
        }

        return SUCCESS;
    }

    public String eliminarNetwork() {
        EntityManager em = null;

        try {
            em = emfBasket.createEntityManager(); // checked

            Query q = em.createNamedQuery("Network.findByNombreUrl");
            q.setParameter("nombre", nombre);
            Network n = (Network)q.getSingleResult();

            // Sólo puden borrar las networks sus creadores
            if (n.getUsuario().getId() == getIdUsuarioLogado()) {
                Network ne = em.find(Network.class, n.getId());

                em.getTransaction().begin();
                em.remove(ne);
                em.getTransaction().commit();
            }
        } catch (Exception e) {
            log.error("[buscaNetworks]: Error: ", e);
        } finally {
            try { if (em.getTransaction().isActive()) { em.getTransaction().rollback(); }; } catch (Exception e) { }
            try { em.close(); } catch (Exception e) { };
        }

        return SUCCESS;
    }

    public List<Network> getDatos() {
        return datos;
    }

    public void setDatos(List<Network> resultadoBusqueda) {
        this.datos = resultadoBusqueda;
    }

    public List<Network> getListaNetworks() {
        List<Network> retorno = null;

        String letraDesde = "0";
        String letraHasta = "9";

        log.debug("\nBuscando " + getCadena());
      
        if (getCadena() != null) {
            // Búsqueda por cadena, si hay al menos 3 letras
            if (getCadena().length() >= 3) {
                log.debug("Buscando por cadena" + getCadena());
                retorno = buscaNetworks(getCadena());
            }
        } else {
            //por defecto
            if (letras != null) {
                if (letras.length() == 3) {
                    letraDesde = letras.substring(0,1);
                    letraHasta = letras.substring(2,3);
                } else if (letras.equals("todas")) {
                    letraDesde = "a";
                    letraHasta = "z";
                }
            }else {
                    letras="";
            }

            if (letras!=null && letras!="") {
                log.debug("Buscando por letras" + letraDesde + ", "+ letraHasta);
                retorno = buscaNetworks(letraDesde, letraHasta);
            }
        }
          
        return retorno;
    }

    private List<Network> buscaNetworks(String cadena){
        List<Network> retorno = null;
        EntityManager em = null;

        try {
            //creamos una conexion a la base de datos
            em = emfBasket.createEntityManager(); // checked

            log.debug("Buscando por cadena" + cadena);

            //ejecutamos la query que busca networks por una cadena
            Query qc = em.createNativeQuery("SELECT * FROM rankings.network WHERE LOWER(nombre) LIKE :nombre", Network.class);
            qc.setParameter("nombre", "%" + cadena.toLowerCase() + "%");

            int totalRegistros = qc.getResultList().size();
            int totalPaginas = (totalRegistros-1)/LISTADO_NETWORKS_ELEMENTOS_POR_PAGINA + 1;
            int offset = (pagina-1) * LISTADO_NETWORKS_ELEMENTOS_POR_PAGINA;

            Query q = em.createNativeQuery("SELECT * FROM rankings.network WHERE LOWER(nombre) LIKE :nombre", Network.class);
            q.setParameter("nombre", "%" + cadena.toLowerCase() + "%");
            q.setFirstResult((pagina-1)*LISTADO_NETWORKS_ELEMENTOS_POR_PAGINA);
            q.setFirstResult(offset);
            q.setMaxResults(LISTADO_NETWORKS_ELEMENTOS_POR_PAGINA);

            retorno = (List<Network>)q.getResultList();

            log.debug("=====================================");
            log.debug("pagina: " + pagina);
            log.debug("offset: " + offset);
            log.debug("cadena: " + cadena);
            log.debug("retorno: " + retorno);
            log.debug("=====================================");

            //Para cada network calculamos su posicion media
            for(int i=0;i<retorno.size();++i){
                retorno.get(i).getPosicionMedia();
            }

            cabecera.setCorrecto(1);
            cabecera.setActual(pagina);
            cabecera.setTotal(totalPaginas);
            cabecera.setElementos(LISTADO_NETWORKS_ELEMENTOS_POR_PAGINA);
            cabecera.setElementoInicial(offset);
            cabecera.setElementoFinal(offset + retorno.size());

            int p1=0, p2=0;

            if (pagina <= (LISTADO_NETWORKS_HUECOS_LADO_PAGINA+1)) {
                p1 = 1;
                p2 = LISTADO_NETWORKS_HUECOS_LADO_PAGINA*2 + 1;
            } else if (pagina >= (totalPaginas-LISTADO_NETWORKS_HUECOS_LADO_PAGINA)) {
                p1 = totalPaginas - (LISTADO_NETWORKS_HUECOS_LADO_PAGINA*2);
                p2 = totalPaginas;
            } else {
                p1 = pagina - LISTADO_NETWORKS_HUECOS_LADO_PAGINA;
                p2 = pagina + LISTADO_NETWORKS_HUECOS_LADO_PAGINA;
            }
            if (p2 > totalPaginas) {
                p2 = totalPaginas;
            }
            cabecera.setPrimeraPagina(p1);
            cabecera.setUltimaPagina(p2);

        } catch (Exception e) {
            log.error("[buscaNetworks]: Error: ", e);
        } finally {
            try { em.close(); } catch (Exception e) { };
        }

        return retorno;
    }

    private List<Network> buscaNetworks(String letraDesde, String letraHasta){
        List<Network> retorno = null;
        EntityManager em = null;
        
        try {
            //creamos una conexion a la base de datos
            em = emfBasket.createEntityManager(); // checked

            //ejecutamos la query que buisca networks de una letra a otra letra
            Query qc = em.createNativeQuery("select n.id, n.nombre, n.nombre_url, n.total, avg(posicion) as posicion_media "
                    + "from rankings.network n left join rankings.ranking_network rn "
                    + "on rn.network_id = n.id "
                    + "where n.nombre >= :letraDesde and n.nombre <= :letraHasta "
                    + "group by n.id, n.nombre, n.nombre_url, n.total "
                    + "order by n.nombre");
            qc.setParameter("letraDesde", letraDesde);
            qc.setParameter("letraHasta", letraHasta);
            int totalRegistros = qc.getResultList().size();
            int totalPaginas = (totalRegistros-1)/LISTADO_NETWORKS_ELEMENTOS_POR_PAGINA + 1;

            int offset = (pagina-1) * LISTADO_NETWORKS_ELEMENTOS_POR_PAGINA;

            Query q = em.createNativeQuery("select n.*, avg(posicion) as posicionMedia "
                    + "from rankings.network n left join rankings.ranking_network rn "
                    + "on rn.network_id = n.id "
                    + "where n.nombre >= :letraDesde and n.nombre <= :letraHasta "
                    + "group by n.id, n.nombre, n.nombre_url, n.total, n.creador, n.f_alta "
                    + "order by n.id desc", Network.class);
            q.setParameter("letraDesde", letraDesde);
            q.setParameter("letraHasta", letraHasta);
            q.setFirstResult(offset);
            q.setMaxResults(LISTADO_NETWORKS_ELEMENTOS_POR_PAGINA);

            retorno = (List<Network>)q.getResultList();

            log.debug("=====================================");
            log.debug("pagina: " + pagina);
            log.debug("offset: " + offset);
            log.debug("letraDesde: " + letraDesde);
            log.debug("letraHasta: " + letraHasta);
            log.debug("retorno: " + retorno);
            log.debug("=====================================");

            //Para cada netwotrk calculamos su posicion media
            for(int i=0;i<retorno.size();++i){
                retorno.get(i).getPosicionMedia();
            }

            cabecera.setCorrecto(1);
            cabecera.setActual(pagina);
            cabecera.setTotal(totalPaginas);
            cabecera.setElementos(LISTADO_NETWORKS_ELEMENTOS_POR_PAGINA);
            cabecera.setElementoInicial(offset);
            cabecera.setElementoFinal(offset + retorno.size());

            int p1=0, p2=0;

            if (pagina <= (LISTADO_NETWORKS_HUECOS_LADO_PAGINA+1)) {
                p1 = 1;
                p2 = LISTADO_NETWORKS_HUECOS_LADO_PAGINA*2 + 1;
            } else if (pagina >= (totalPaginas-LISTADO_NETWORKS_HUECOS_LADO_PAGINA)) {
                p1 = totalPaginas - (LISTADO_NETWORKS_HUECOS_LADO_PAGINA*2);
                p2 = totalPaginas;
            } else {
                p1 = pagina - LISTADO_NETWORKS_HUECOS_LADO_PAGINA;
                p2 = pagina + LISTADO_NETWORKS_HUECOS_LADO_PAGINA;
            }
            if (p2 > totalPaginas) {
                p2 = totalPaginas;
            }
            cabecera.setPrimeraPagina(p1);
            cabecera.setUltimaPagina(p2);

        } catch (Exception e) {
            log.error("[buscaNetworks]: Error: ", e);
        } finally {
            try { em.close(); } catch (Exception e) { };
        }

        return retorno;

    }

    public String detalleNetwork() {

        String retorno = SUCCESS;

        try {

            //Obtenemos la lista de equipos para formar el ranking
            setRankingNetwork(getListaRankingPorNetworkUrl(nombre));
            
            if (getUsuarioLogado()!=null) {
                //setListaEquiposMostrar(getUsuarioLogado().getEquipos());
            }

        } catch (NoResultException nre) {
            log.debug("No se ha encontrado la network " + nombre);
        } catch (Exception e) {
            log.error("[detalleNetwork]: Error: ", e);
        }

        return retorno;

    }

    private List<Ranking> getListaRankingPorNetworkUrl(String nombre){
        EntityManager em = null;
        List<Ranking> lista=null;
        
        try {
            em = emfBasket.createEntityManager(); // checked

            //buscamos la network por su nombreUrl
            Query q = em.createNamedQuery("Network.findByNombreUrl");
            q.setParameter("nombre", nombre);
            Network n = (Network)q.getSingleResult();

            log.debug("network n: " + n);

            setNetwork(n);

            //obtenemos su ranking ordenado por posiciones pasandole el id de la network
            lista = getRankingNetworkById(n.getId());

        } catch (NoResultException nre) {
            log.debug("No se ha encontrado la network " + nombre);
        } catch (Exception e) {
            log.error("[detalleNetwork]: Error: ", e);
        } finally {
            try { em.close(); } catch (Exception e) { };
        }
        return lista;
    }

    private List<Ranking>getRankingNetworkById(int id){
        EntityManager em = null;
        List<Ranking> lista=null;

        try {
            em = emfBasket.createEntityManager(); // checked

            //ranking ordenado por posicion y luego id
            Query q = em.createNativeQuery("select network_id, equipo_id, f_alta, equipo_id as id, posicion, ant_posicion from rankings.equipo_network en left join rankings.ranking r on en.equipo_id = r.id where en.network_id = :idNetwork order by r.posicion, id", Ranking.class);
            q.setParameter("idNetwork", id);
            lista = (List<Ranking>)q.getResultList();

        } catch (NoResultException nre) {
            log.debug("No se ha encontrado la network con id" + id);
        } catch (Exception e) {
            log.error("[getRankingNetworkById]: Error: ", e);
        } finally {
            try { em.close(); } catch (Exception e) { };
        }
        return lista;
    }

    public List<Equipo> getEquiposParaInscribir() {

        //hacemos una copia de los equipos del usuario
        List<Equipo> retorno = new ArrayList<Equipo>();
        for (Equipo ne : getUsuarioLogado().getEquipos()) {
            retorno.add(ne);
        }

        //recorremos cada de la lista de equipos y buscamos dentro del ranking,si esta ,le eliminamos
        Equipo e;
        for(int j=0;j<retorno.size();++j)
        {
            e = retorno.get(j);
            for(int i=0;i<getRankingNetwork().size();++i)
            {
                if( e.getId().equals(((Ranking)getRankingNetwork().get(i)).getEquipo().getId()) )
                {
                    //borramos el equipo que se encuentra ya en el ranking
                    retorno.remove(e);
                    --j; //para no saltarnos un equipo
                }
            }
        }

        return retorno;
    }

    public int getPagina() {
        return pagina;
    }

    public void setPagina(int pagina) {
        this.pagina = pagina;
    }

    public int getCuantos() {
        return cuantos;
    }

    public void setCuantos(int cuantos) {
        this.cuantos = cuantos;
    }

    public String getLetras() {
        return letras;
    }

    public void setLetras(String letras) {
        this.letras = letras;
    }

    public InfoCabeceraXHR getCabecera() {
        return cabecera;
    }

    public void setCabecera(InfoCabeceraXHR cabecera) {
        this.cabecera = cabecera;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public int getEid() {
        return eid;
    }

    public void setEid(int eid) {
        this.eid = eid;
    }

    public String getTc() {
        return tc;
    }

    public void setTc(String tc) {
        this.tc = tc;
    }

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public Network getNetwork() {
        return network;
    }

    public void setNetwork(Network network) {
        this.network = network;
    }

    public List<Ranking> getRankingNetwork() {
        return rankingNetwork;
    }

    public void setRankingNetwork(List<Ranking> rankingNetwork) {
        this.rankingNetwork = rankingNetwork;
    }

    public String getCadena() {
        return cadena;
    }

    public void setCadena(String cadena) {
        this.cadena = cadena;
    }

}
